<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\repose\projectrepose;//引入project的repose,如果用注入的方法，哪个方法注入了就只能哪个方法使用，应该在构造函数中注入，赋值在本类中,这样本类的每个方法都可以间接调用这个projectrepose

use App\Http\Requests\CreateProjectRequest;//引入project的表单验证，函数的Request类就可以替换成这个验证类，验证类是继承了表单request类的
use App\Http\Requests\EditProjectRequest;//引入project的表单验证，函数的Request类就可以替换成这个验证类，验证类是继承了表单request类的

use Redirect;
use App\project;//模型
use Auth;
class ProjectController extends Controller
{
    protected $repose;//保护一下这个repose只能这个类以及子类使用

    public function __construct(projectrepose $repose) {
        $this->repose = $repose;
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *表单新建一个记录
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *post访问，表单保存项目的方法
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(CreateProjectRequest $request)
    {
        // 代码重构，通过repose中的逻辑代码将数据存入数据库
        $this->repose->newProject($request);
        return Redirect::back();


        //自动加载了project模型->调用模型里的user方法->返回belongsTo(user)模型->调用user模型的projects方法->返回hasMany(project)->查询构造器create
        // $request->user()->projects()->create([
        //         'name'=>$request->name,
        //         'thum'=>$this->upload($request)
        //     ]);
        // dd($request);
        // 表单提交过来的数据
        // return $request->name;
        //正在登陆的用户数据
        // return $request->user();
    }



    /**
     * Display the specified resource.
     *显示单个项目
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        // 将这个项目查询出来，传到视图，把id给createtask表单使用，
        $project = Auth::user()->projects()->where('id',$id)->first();
        // 查询这个项目下的未完成任务，并将数据传递到视图
        $tasktodo = $project->tasks()->where('status',0)->get();
        // 查询这个项目下的未完成任务，并将数据传递到视图
        $taskdone = $project->tasks()->where('status',1)->get();
        // 查询所有项目并组成键值对,给下拉框用
        $projectss = project::pluck('name','id');
        return view('project.show',compact('project','tasktodo','taskdone','projectss'));
    }

    /**
     * Show the form for editing the specified resource.
     *编辑单个项目
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *更新单个项目
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(EditProjectRequest $request, $id)
    {
        // 通过repose中的updateproject方法将提交的数据更新到数据库
        $this->repose->updateProject($request,$id);
        return Redirect::back();
    }

    /**
     * Remove the specified resource from storage.
     *destroy，删除单个id的记录
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        // 删除某个项目
        project::find($id)->delete();

        // 返回前一页面
        return Redirect::back();
    }
}